package org.pidan.basic.multiThread;

/**
 * {@code @description}: volatile
 * {@code @author}: huangyuxin
 * {@code @date}: 2023-12-12
 */
public class Volatile {

    /**
     * 主线程修改值后，线程并不会读取到修改的值，导致一直死循环
     */
//    public static boolean flag = true;

    /**
     * 使用volatile修饰共享变量
     * 线程中读取的时候，每次读取都会去主内存中读取共享变量最新的值，然后将其复制到工作内存
     * 线程中修改了工作内存中变量的副本，修改之后会立即刷新到主内存
     */
    public volatile static boolean flag = true;

    public static class T1 extends Thread {

        public T1(String name) {
            super(name);
        }

        @Override
        public void run() {
            System.out.println("线程 " + this.getName() + " in");

            while (flag) {
                ;
            }
            System.out.println("线程 " + this.getName() + " 结束");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        new T1("t1").start();
        Thread.sleep(1000);
        flag = false;
    }
}
